Enterprise grade storage systems may need to support enterprise grade file services. For example, in a network (e.g., cloud based network, on-premises network, etc.), computing devices (e.g., virtual computing instances (e.g., virtual machines, containers, etc.), physical computing devices, host computers, etc.) may support a network protocol (e.g., Server Message Block (SMB) protocol, iSCSI, etc.) that supports the sharing of data, files, resources, and/or permits authenticated inter-process communication between devices, such as a client and server. Clients may be configured to access files stored in one or more storage devices (e.g., SSD, PCI-based flash storage, SATA, or SAS magnetic disks) of one or more servers using such a network protocol. For example, the clients may issue (e.g., send) commands (open, close, etc.), which also may be referred to herein as file operations, to a server to access files stored on the one or more storage devices. The one or more servers including one or more storage devices may be referred to as a storage system, which may provide file services to clients.
It may be desirable that such a storage system provide transparent failover during upgrade or hardware failure as needed. For example, if a server of the storage system should fail, or not be available for access by clients, such as during an upgrade of the server, transparent failover would allow a client to not incur any service disruption during the unavailability of the server. In particular, the storage system may include a failover cluster including at least two servers, each configured to operate in a file server role and enabled to support continuous availability (e.g., such as in Continuous Availability of SMB3 protocol (SMB3-CA)). The failover cluster, therefore, acts as a clustered file server, and should one of the servers of the failover cluster not be available, the other server(s) of the failover cluster operate as the file server. One or more file shares may be created on the clustered file server and made continuously available to clients.
Accordingly, when a client initially connects to the file share on the clustered file server (e.g., by connecting to one of the servers of the clustered file server), the client determines that the file share has continuous availability enabled. When the client then opens a file on the file share (e.g., on behalf of an application running on the client), the client requests a persistent file handle. A file handle may be a number that is temporarily assigned by the clustered file server to the file when it is opened. The client/clustered file server may then utilize the file handle internally when accessing the file. A persistent file handle is a file handle that is available across each server of the clustered file server. Therefore, should one server go down, the client can still use the persistent file handle for accessing the file over a connection to another server of the clustered file server.
However, the persistent file handle is typically implemented by storing the persistent file handle (e.g., and associated metadata such as a unique key, also referred to as a resume key, supplied by the client) to highly available stable storage (e.g., non-volatile storage such as SSD, PCI-based flash storage, SATA, or SAS magnetic disks which is made highly available using replication/mirroring or erasure coding across servers so that data on the storage is still available when a certain number of servers fail). This highly available stable storage may be referred to as “stable storage” herein. In particular, storage to stable storage ensures that should the server fail, the persistent file handle is recoverable from stable storage, as opposed to being stored in volatile memory (e.g., RAM). Therefore, use of persistent file handles can create large amounts of overhead, which may affect performance of the file service. For example, every file open/close operation performed on the storage system may need to be persisted to stable storage. Accordingly, more efficient systems and techniques for enabling continuous availability in storage systems are desirable.